/**
 * 以前node里全部回调
 */
export { }
let BluebirdPromise = require('bluebird');
let fs = require('fs');


// ------------------------------------------------------------------------- 原生读取文件内容 0
// fs.readFile('./1.txt', 'utf8', function (err, data) {
//     console.log(data);
// }); 


// ------------------------------------------------------------------------- promise适配器模式  1

// promise适配器，将 fs.readFile 异步读取文件包装成promse，这样扩展性不好，下面传入异步函数的好
// function readFilePromiseAdaptor(...args) {
//     return new Promise(function (resolve) {
//         fs.readFile(...args, function (err, data) {
//             resolve(data);
//         });
//     });
// }
// (async function () {
//     let content = await readFilePromiseAdaptor('./1.txt', 'utf8');
//     console.log(content);
// })();


// ------------------------------------------------------------------------- promise适配器模式  2
// promise适配器 将callableFn异步方法(fs.readFile)包装成promise
function promiseAdaptor(callableFn) {//fs.readFile
    return function (...args) {
        return new Promise(function (resolve, reject) {
            callableFn(...args, function (err, result) {
                err ? reject(err) : resolve(result)
            });
        });
    }
}

let readFile = BluebirdPromise.promiseAdaptor(fs.readFile);

// 专门有一个库就是这个的，将一个函数包装成promise
// let readFile = BluebirdPromise.promisify(fs.readFile);
(async function () {
    let content = await readFile('./1.txt', 'utf8');
    console.log(content);
})();